home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. Windows 3
/
dr win3.zip
/
dr win3
/
WINPROGS
/
UPC12BS1.ZIP
/
LIB
/
SAFEOUT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-02
|
5KB
|
141 lines
/*--------------------------------------------------------------------*/
/* s a f e o u t . c */
/* */
/* Console I/O functions for use during interrupt processing */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* Changes Copyright (c) 1989-1993 by Kendra Electronic */
/* Wonderworks. */
/* */
/* All rights reserved except those explicitly granted by the */
/* UUPC/extended license agreement. */
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/* RCS Information */
/*--------------------------------------------------------------------*/
/*
* $Id: safeout.c 1.5 1993/10/03 00:05:32 ahd Exp $
*
* Revision history:
* $Log: safeout.c $
* Revision 1.5 1993/10/03 00:05:32 ahd
* Only define currentfile() under Windows NT
*
* Revision 1.4 1993/09/20 04:39:51 ahd
* OS/2 2.x support
*
* Revision 1.3 1993/07/20 21:42:43 dmwatt
* Don't rely on standard I/O under Windows/NT
*
*/
/*--------------------------------------------------------------------*/
/* Since C I/O functions are not safe inside signal routines, */
/* the code uses conditionals to use system-level DOS and OS/2 */
/* services. Another option is to set global flags and do any */
/* I/O operations outside the signal handler. */
/*--------------------------------------------------------------------*/
#define __MSC /* Make Borland C++ 2.0 act like MS C */
#include <stdio.h>
#ifdef WIN32
#include <windows.h>
#include <string.h>
#elif defined( FAMILYAPI ) || defined(__OS2__)
#define INCL_NOCOMMON
#define INCL_NOPM
#define INCL_VIO
#define INCL_KBD
#include <os2.h>
#include <string.h>
#else
#include <dos.h>
#include <bios.h>
#include <conio.h>
#endif /* FAMILYAPI */
/*--------------------------------------------------------------------*/
/* UUPC/extended include files */
/*--------------------------------------------------------------------*/
#include "lib.h"
#include "safeio.h"
/*--------------------------------------------------------------------*/
/* Global variables */
/*--------------------------------------------------------------------*/
#if defined(WIN32)
currentfile();
#endif
#if defined(WIN32)
static HANDLE hConsoleOut = INVALID_HANDLE_VALUE;
void InitConsoleOutputHandle(void)
{
hConsoleOut = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if (hConsoleOut == INVALID_HANDLE_VALUE) {
printmsg(0, "InitConsoleHandles: could not open console handles!");
panic();
}
}
#endif
/*--------------------------------------------------------------------*/
/* s a f e o u t */
/* */
/* Outputs a string using system level calls. from MicroSoft */
/* Programmer's Workbench QuickHelp samples */
/*--------------------------------------------------------------------*/
void safeout( char *str )
{
#ifdef _Windows
fputs( str , stdout );
return;
#elif defined( WIN32 )
DWORD dwBytesWritten;
if (hConsoleOut == INVALID_HANDLE_VALUE)
InitConsoleOutputHandle();
WriteFile(hConsoleOut, str, (DWORD)strlen(str), &dwBytesWritten, NULL);
return;
#elif defined( FAMILYAPI ) || defined(__OS2__)
VioWrtTTY( str, strlen( str ), 0 );
#else
union REGS inregs, outregs;
inregs.h.ah = 0x0e;
while( *str )
{
inregs.h.al = *str++;
int86( 0x10, &inregs, &outregs );
}
safeflush(); /* Flush keyboard */
#endif /* _Windows */
} /* safeout */